您可以通过如下方式配置您的 Kanzi 应用程序:
onConfigure()
函数。您可以在 onConfigure()
函数中配置您的 Kanzi 应用程序,而在 application.cfg 中,您无需重新编译应用程序甚至无需使用 C++ 应用程序即可配置某些参数。您在 application.cfg 中指定的配置会重写您在 onConfigure()
中指定的配置。
例如,在 application.cfg 中,您可以告诉 Kanzi 应用程序要加载哪个 kzb 文件、启用应用程序中的性能信息并设置您要使用多少个线程来加载应用程序资源。
请参阅配置应用程序。
您可以使用这些应用程序配置设置。
加载
性能
图形缓存纹理大小
优化
Graphics card selection
|
图形性能日志
图形库
表面属性
|
应用程序窗口位置和大小
应用程序窗口配置
输入处理
Linux 上的输入事件设备
|
您可以设置当您启动 Kanzi 应用程序时,您的 Kanzi 应用程序要加载哪个 kzb 文件或配置文件。
请参阅使用 kzb 文件。
对于 application.cfg | BinaryName = "name"
|
||
对于 onConfigure() |
configuration.binaryName = "name";
|
||
值 (Value) |
|
||
application.cfg 示例 |
#加载名为 MyApplication.kzb 的 kzb 文件。 #加载列出了 |
||
onConfigure() 示例 |
//加载名为 MyApplication.kzb 的 kzb 文件。 //加载列出了 |
您可以设置在您启动 Kanzi 应用程序时 Kanzi 应用程序加载的插件。
对于 application.cfg | ModuleNames= "names"
|
||
对于 onConfigure() |
configuration.moduleNames = names;
|
||
值 |
|
||
application.cfg 示例 |
# 加载插件 DLL 文件 MyPlugin1.dll 和 MyPlugin2.dll。 |
||
onConfigure() 示例 |
//加载插件 DLL 文件 MyPlugin1.dll 和 MyPlugin2.dll。 |
当用户在具有多核处理器的环境中运行 Kanzi 应用程序时,Kanzi 会自动使用多个 CPU 内核将 kzb 文件中的 GPU 资源加载到 RAM 中。请参阅并行加载资源。
GPU 资源 Kanzi 并行加载包括所有类型在内的纹理、着色器和网格。为将这些资源从 RAM 部署到 GPU 内存并加载预设件模板,Kanzi 始终使用主线程。请参阅图像和纹理最佳实践、着色器最佳实践、网格最佳实践。
对于 application.cfg | LoadingThreadCount = threads
|
||
对于 onConfigure() |
configuration.loadingThreadCount = threads;
|
||
值 |
|
||
application.cfg 示例 | #禁止使用多个内核加载您的应用程序。 #使用 6 个线程加载您的应用程序。 |
||
onConfigure() 示例 |
//禁止使用多个内核加载您的应用程序。 //使用 6 个线程加载您的应用程序。 |
您可以设置加载线程同时处理的最大资源数量。通过增大资源数量,您可以加快加载速度,但加载期间的峰值内存使用量也会增大,原因在于您可以在将资源部署到 GPU 中之前将更多的资源加载到内存中。
对于 application.cfg | MaxPendingResources = resources
|
||
对于 onConfigure() |
configuration.maxPendingResources = resources;
|
||
值 |
|
||
application.cfg 示例 | #将加载线程处理的最大资源数量设置为 #加载线程数量 +1。这是默认值。 MaxPendingResources = 0 #将加载线程处理的最大资源数量设置为 #20 个。 MaxPendingResources = 20 |
||
onConfigure() 示例 |
//将加载线程处理的最大资源数量设置为 //加载线程数量 +1。这是默认值。 configuration.maxPendingResources = 0; //将加载线程处理的最大资源数量设置为 //20 个。 configuration.maxPendingResources = 20; |
如果没有输入、任务、定时器、动画,又或是应用程序中没有可以更新渲染的任何内容,Kanzi 会暂停主循环。请参阅应用程序空闲状态。
当使用应用程序空闲状态时,请考虑下面这些使用案例:
Application::updateOverride
,禁用该应用程序空闲状态。对于 application.cfg | ApplicationIdleState = value
|
||||
对于 onConfigure() |
configuration.applicationIdleStateEnabled = value;
|
||||
值 |
|
||||
application.cfg 示例 | #禁用应用程序空闲状态。 |
||||
onConfigure() 示例 |
//禁用应用程序空闲状态。 |
您可以设置最高帧速率,以限制每秒渲染帧数。
如果您的 Kanzi 应用程序正在显示动画,Kanzi 默认会调节 CPU 运行速度以获得最高的 FPS。如果没有显示任何动画,Kanzi 会将应用程序设置为空闲状态。因此,为了节省 CPU 资源和能耗,Kanzi 默认会将最高帧速率限制为 60 帧/秒。请使用应用程序配置来设置您的应用程序的最高帧速率。
请参阅 PerformanceInfoLevel。
对于 application.cfg | MaximumFPS = limit
|
||
对于 onConfigure() |
configuration.frameRateLimit = limit;
|
||
值 (Value) |
|
||
application.cfg 示例 | #将应用程序的最高帧速率设置为 32 帧/秒。 MaximumFPS = 32 #禁用限制。 |
||
onConfigure() 示例 |
//将应用程序的最高帧速率设置为 32 帧/秒。 configuration.frameRateLimit = 32; //禁用限制。 configuration.frameRateLimit = 0; |
您可以允许显示性能 HUD (Performance HUD),以显示 Kanzi 应用程序的性能信息。使用性能 HUD (Performance HUD) 查看您的应用程序在目标设备上的运行方式并发现性能瓶颈。
性能 HUD (Performance HUD)为您的 Kanzi 应用程序显示性能信息:
glDrawElements
和 glDrawArrays
)。getBatchCount()
。getTriangleCount()
。getTextureSwitchCount()
。getFramebufferSwitchCount()
。getShaderSwitchCount()
。getUniformSendCount()
。KzuMessageDispatcher
中已注册的计时器处理程序数量。计时器处理程序过多会导致应用程序性能下降。kzuMessageDispatcherGetTimerSubscriptionCount()
。KzuTaskScheduler
中周期性发生的任务数。周期性任务过多会导致应用程序性能下降。kzuTaskSchedulerGetRecurringTaskCount()
。getActiveTimelinePlaybackCount()
函数。getTimelinePlaybackCount()
。您可以设置 性能 HUD (Performance HUD) 在 Kanzi 应用程序窗口中的位置。请参阅 性能信息位置。
请参阅 最佳实践。
对于 application.cfg | PerformanceInfoLevel = level
|
||
对于 onConfigure() |
configuration.performanceInfoLevel = ApplicationProperties::level;
|
||
值 |
|
||
application.cfg 示例 | #在 Kanzi 应用程序中启用完整的性能 HUD (Performance HUD)。 |
||
onConfigure() 示例 |
//在 Kanzi 应用程序中启用完整的性能 HUD (Performance HUD)。 |
您可以设置 性能 HUD (Performance HUD) 在 Kanzi 应用程序窗口中的位置。要在 Kanzi 应用程序窗口中查看 性能 HUD (Performance HUD),必须先启用此功能。请参阅 PerformanceInfoLevel。
对于 application.cfg | PerformanceInfoPositionX = positionX
|
||||
对于 onConfigure() |
configuration.performanceInfoProperties.positionX = positionX;
|
||||
值 (Value) |
|
||||
application.cfg 示例 | #定位 性能 HUD (Performance HUD) 到 Kanzi 应用程序窗口的左边距为 100 个像素, #上边距为 20 个像素。 PerformanceInfoPositionX = 100 PerformanceInfoPositionY = 20 |
||||
onConfigure() 示例 |
//定位 性能 HUD (Performance HUD) 到 Kanzi 应用程序窗口的 //左边距为 100 个像素, //上边距为 20 个像素。 |
您可以控制性能剖析类别的状态,它可用于对性能剖析程序进行分组,并设置要在性能 HUD (Performance HUD) 中显示的剖析程序。请参阅测量应用程序性能。
对于 application.cfg | ProfilingCategoryFilter = "category=state"
|
||||||||||
对于 onConfigure() |
configuration.profilingCategoryFilter = "category=state";
|
||||||||||
值 |
用分号分隔类别状态对 (;)。 |
||||||||||
application.cfg 示例 | # 启用完整的性能 HUD (Performance HUD)。 PerformanceInfoLevel = 2 # 为主循环中运行的动画启用性能剖析,在性能 HUD (Performance HUD) 中显示性能图。 ProfilingCategoryFilter="MainLoopAnimation=show" # 启用 MyFunctionProfiler 类别并禁用 MainLoopRendering 类别。 ProfilingCategoryFilter="MyFunctionProfiler=on;MainLoopRendering=off" # 启用所有性能剖析类别。 ProfilingCategoryFilter="*=on" # 启用类别 Generic 和 MyProfilingCategory。 ProfilingCategoryFilter="Generic|MyProfilingCategory=on" # 启用资源剖析。请参阅测量资源加载和部署的时间。 ProfilingCategoryFilter="ResourceLoading=on" |
||||||||||
onConfigure() 示例 |
//启用完整的性能 HUD (Performance HUD)。 configuration.performanceInfoLevel = ApplicationProperties::PerformanceInfoLevelFull; //为主循环中运行的动画启用性能剖析,在性能 HUD (Performance HUD) 中显示性能图。 configuration.profilingCategoryFilter = "MainLoopAnimation=show"; # 启用 MyFunctionProfiler 类别并禁用 MainLoopRendering 类别。 configuration.profilingCategoryFilter="MyFunctionProfiler=on;MainLoopRendering=off" //启用所有性能剖析类别。 configuration.profilingCategoryFilter = "*=on"; //启用类别 Generic 和 MyProfilingCategory。 configuration.profilingCategoryFilter = "Generic|MyProfilingCategory=on"; //启用资源剖析。请参阅测量资源加载和部署的时间。 configuration.profilingCategoryFilter = "ResourceLoading=on"; |
此表列出了 Kanzi 启动性能剖析类别和 Profiling build 中包含的剖析程序。
类别 (Category) | 配置名称 | 剖析程序 |
---|---|---|
应用程序初始化 | StartupInitialization | m_initializationProfiler |
默认资源注册 | StartupRegisterDefaultResources | m_registerDefaultResourcesProfiler |
图像初始化 | StartupInitializeGraphics | m_initializeGraphicsProfiler |
GL 子系统初始化 | StartupInitializeGL | m_initializeGLProfiler |
启动 kzb 文件打开 | StartupOpenKzb | m_openKzbProfiler |
加载线程初始化 | StartupInitializeLoadingThreads | m_initializeLoadingThreadsProfiler |
元数据注册 | StartupRegisterMetadata | m_registerMetadataProfiler |
插件加载 | StartupLoadPlugins | m_loadPluginsProfiler |
预设件加载 | StartupLoadPrefab | m_loadPrefabProfiler |
预设件安装 | StartupInstantiatePrefab | m_instantiatePrefabProfiler |
预设件附加 | StartupAttachPrefab | m_attachPrefabProfiler |
渲染器重置 | StartupResetRenderer | m_resetRendererProfiler |
运行时资产注册 | StartupRegisterRuntimeAssets | m_registerRuntimeAssetsProfiler |
此表列出了 Kanzi 主循环任务性能剖析类别和 Profiling build 中包含的剖析程序。
类别 (Category) | 配置名称 | HUD 中的标题 | 剖析程序 |
---|---|---|---|
动画 (Animations) 测量渲染动画的时间。 | MainLoopAnimation | 主循环:动画 | m_animationProfiler |
应用程序事件处理 测量收集和处理所有可用事件源的事件所花费的事件,如键盘、鼠标和其他可用操纵器。 | MainLoopApplicationEvents | 主循环:应用程序事件 | m_applicationEventsProfiler |
应用程序逻辑更新 测量花费在您提供的 Application::update 重写上的时间。 | MainLoopAppUpdate | 主循环:应用程序更新 | m_appUpdateProfiler |
用户提供的应用程序逻辑更新 测量花费在执行您提供的更新逻辑回调 Application::onUpdate 上的时间。 | MainLoopUserUpdate | 主循环:用户更新 | m_userUpdateProfiler |
图形事件处理 测量处理影响图形输出的事件花费的时间,如重设窗口大小。 | MainLoopGraphicsEvents | 主循环:图形事件 | m_graphicsEventsProfiler |
性能 HUD (Performance HUD) 测量渲染 性能 HUD (Performance HUD) 中的信息导致的开销。 | MainLoopHUD | 主循环:HUD | m_hudProfiler |
输入事件处理 测量 InputManager 处理输入事件花费的时间,如键盘和鼠标事件。 | MainLoopInput | 主循环:输入 | m_inputProfiler |
布局 测量布局通道的性能。 | MainLoopLayout | 主循环:布局 | m_layoutProfiler |
渲染 (Rendering) 测量在 Application::renderOverride 中渲染屏幕所花费的时间。 | MainLoopRendering | 主循环:渲染 | m_renderingProfiler |
资源部署 测量处理异步任务部署队列花费的时间。 | MainLoopResourceDeployment | 主循环:资源部署 | m_resourceDeploymentProfiler |
资源管理器更新 测量 ResourceManager 处理负载和部署队列花费的时间。 | MainLoopResourceManagerUpdate | 主循环:资源管理器更新 | m_resourceManagerUpdateProfiler |
任务调度程序 测量执行添加到任务调度器中的任务花费的时间。 | MainLoopTaskDispatcher | 主循环:任务调度程序 | m_taskDispatcherProfiler |
任务调度器 测量执行添加到任务调度器中的定期任务花费的时间,如动画。 | MainLoopTaskScheduler | 主循环:任务调度器 | m_taskSchedulerProfiler |
您可以设置 Profiling build 包含的主循环性能剖析程序的样本缓冲区大小。请参阅测量 Kanzi Engine 的性能 和 ProfilingCategoryFilter。
对于 application.cfg | MainLoopProfilingSampleBufferCount = samples
|
||
对于 onConfigure() |
configuration.mainLoopProfilingSampleBufferCount = samples
|
||
值 |
|
||
application.cfg 示例 | #将主循环性能剖析程序中的最大样本数设置为 3600。 MainLoopProfilingSampleBufferCount = 3600 |
||
onConfigure() 示例 |
//将主循环性能剖析程序的最大样本数设置为 3600。 configuration.mainLoopProfilingSampleBufferCount = 3600; |
当使用文本块 (Text Block) Kanzi 时,为字体与字号的每种组合创建图形缓存纹理。 您可以设置图形缓存纹理的高度和宽度,以便在图形缓存纹理填满时或者为了优化 Kanzi 应用程序的性能而调整图形缓存纹理的大小。
由于图形缓存纹理越大,使用的 VRAM 越多,因此请在设置最终大小之前尝试不同的大小。图形缓存纹理大小的上限取决于 GPU,但通常为 2048x2048 像素。图形缓存纹理的默认大小为 512x512 像素。
Kanzi 会将图形缓存纹理大小应用于所有图形缓存纹理。
对于 application.cfg | GlyphCacheHeight = size
|
||
对于 onConfigure() |
configuration.glyphCacheHeight = size;
|
||
值 |
|
||
application.cfg 示例 | #将图形缓存纹理的高度设置为 768 像素,将宽度设置为 1024 像素。 |
||
onConfigure() 示例 |
//将图形缓存纹理的高度设置为 768 像素,将宽度设置为 1024 像素。 |
在 integrity_rcar_rwm_aarch64 平台上,您可以设置是否初始化应用程序图形。此方法只适用于最后阶段的优化,即当您想手动同步同时初始化的多个应用程序的启动时。
该配置控制图形驱动器和设备窗口管理器的初始化,以及显示的开关。如果该配置已票用,要启用 Kanzi 应用程序创建窗口,在相同流程中必须:
PVRGrfxServerInit()
R_WM_DevInit()
R_WM_DevInfoGet()
R_WM_ScreenBgColorSet()
R_WM_ScreenEnable()
当图形初始化和此配置均禁用时,必须单独初始化每一个已禁用此设置的应用程序的图形。
对于 application.cfg | InitializePlatform = value
|
||||
对于 onConfigure() |
configuration.defaultWindowProperties.initializePlatform = value;
|
||||
值 |
|
||||
application.cfg 示例 | #禁用图形初始化 |
||||
onConfigure() 示例 |
//禁用图形初始化 |
On the platforms that use the GBM windowing system you can set which graphics card you want your Kanzi application to use.
In application.cfg | DeviceIdentifier = identifier
|
||
In onConfigure() |
configuration.defaultDesktopProperties.deviceIdentifier = identifier;
|
||
Value |
|
||
application.cfg example | # Sets Kanzi to use the graphics card at /dev/dri/card1. |
||
onConfigure() example |
// Sets Kanzi to use the graphics card at /dev/dri/card1. |
您可以在 Application::onConfigure()
函数中、application.cfg 中或使用命令行参数(如果您的目标支持命令行参数)启用 Kanzi,以便将应用程序的图形 API 调用打印到调试控制台。
在命令行使用:
-log-graphics
记录图形 API 调用对于 application.cfg | GraphicsLoggingEnabled = value
|
||||
对于 onConfigure() |
configuration.graphicsLoggingEnabled = value;
|
||||
值 |
|
||||
application.cfg 示例 | #允许记录图形 API 调用。 |
||||
onConfigure() 示例 |
//允许记录图形 API 调用。 |
您可以启用 Kanzi 将应用程序启动时的图形相关扩展列表打印至调试控制台。要在 Android 设备上运行应用程序时获取此信息,请在应用程序代码中使用 logExtensions()
函数。
对于 application.cfg | LogOpenGLExtensions = value
|
||||
对于 onConfigure() |
configuration.extensionOutputEnabled = value;
|
||||
值 |
|
||||
application.cfg 示例 | # 启用记录图形相关扩展。 |
||||
onConfigure() 示例 |
//启用记录图形相关扩展。 |
您可以启用 Kanzi 将应用程序启动时的图形相关信息打印至调试控制台:
要在 Android 设备上运行应用程序时获取此信息,请在应用程序代码中使用 logOpenGLInformation()
函数。
对于 application.cfg | LogOpenGLInformation = value
|
||||
对于 onConfigure() |
configuration.informationOutputEnabled = value;
|
||||
值 |
|
||||
application.cfg 示例 | # 启用记录图形相关信息。 |
||||
onConfigure() 示例 |
//启用记录图形相关信息。 |
您可以启用 Kanzi 将应用程序启动时的图形相关属性打印至调试控制台:
对于 application.cfg | LogSurfaceInformation = value
|
||||
对于 onConfigure() |
configuration.propertyOutputEnabled = value;
|
||||
值 |
|
||||
application.cfg 示例 | # 启用记录图形相关属性。 |
||||
onConfigure() 示例 |
//启用记录图形相关属性。 |
在 Windows 操作系统中,您可以选择是否要在 Application::onConfigure()
函数中、application.cfg 中使用 OpenGL ES 或 OpenGL,或是否使用命令行参数(如您的目标支持的话)。
在命令行使用:
-gles
以使用 OpenGL ES-gl
以使用 OpenGL-egl
以使用 EGL-wgl
以使用 WGL对于 application.cfg | GraphicsBackend = type | ||||
在 onConfigure() 中 | configuration.defaultSurfaceProperties.type = type; | ||||
值 |
| ||||
application.cfg 示例 | # 为 OpenGL 渲染和 WGL 图形上下文设置表面目标。 GraphicsBackend = opengl | ||||
onConfigure() 示例 | //为 OpenGL 渲染和 WGL 图形上下文设置表面目标。 configuration.defaultSurfaceProperties.type = KZS_SURFACE_TYPE_GL_ONLY; |
表面属性控制着 Kanzi 渲染的硬件加速图形表面的属性。它们控制着图像质量与渲染速度之间的关系。您设置的表面属性将被视为目标硬件的图形系统要匹配的请求。当给定的请求被视为上界时,下界或精确值将取决于平台。
表面属性的默认值取决于平台。您可以通过调用 kzsSurfaceGetDefaultProperties()
来获取这些默认值。
对于 application.cfg |
| ||||||||||||||||||||
对于 onConfigure() | configuration.defaultSurfaceProperties.bitsStencil = stencil; | ||||||||||||||||||||
值 |
| ||||||||||||||||||||
application.cfg 示例 | #用于典型高速渲染应用程序的示例配置。 #用于高图像质量应用程序的示例配置 #在 Linux GBM DRM 窗口化系统中,创建一个具有阿尔法(GBM 格式 ARGB8888)的 32 位图面。 #在 Linux GBM DRM 窗口化系统中,创建一个不具有阿尔法的 32 位图面、 #一个 24 位颜色深度,和一个 8 位填充 (GBM 格式 XRGB8888)。 | ||||||||||||||||||||
onConfigure() 示例 | //用于典型高速渲染应用程序的示例配置。 //用于高图像质量应用程序的示例配置。 //在 Linux GBM DRM 窗口化系统中,创建一个具有阿尔法(GBM 格式 ARGB8888)的 32 位图面。 //在 Linux GBM DRM 窗口化系统中,创建一个不具有阿尔法的 32 位图面、 //一个 24 位颜色深度,和一个 8 位填充(GBM_格式_XRGB8888)。 |
您可以设置 Kanzi 应用程序在屏幕上相对于屏幕左上角的位置,并以像素为单位设置应用程序窗口的大小。窗口的默认大小为 640x480 像素并位于设备屏幕的中心。
要使用应用程序具有固定大小、可调整大小、全屏或无边框,请参阅 WindowStyle。
要了解如何设置应用程序窗口出现的默认显示,请参阅 DefaultDisplayIndex。
对于 application.cfg | WindowX = positionX | ||||||||||
对于 onConfigure() | configuration.defaultWindowProperties.x = positionX; | ||||||||||
值 (Value) |
| ||||||||||
application.cfg 示例 | #将宽度设置为 1280 像素,将高度设置为 720 像素,并将其放在与顶部相距 100 像素、 #与设备屏幕的左侧相距 1 像素处。 WindowWidth = 1280 WindowHeight = 720 WindowX = 100 WindowY = 1 #将应用程序窗口放在设备屏幕的左上角。 WindowX = 0 WindowY = 0 #在 Windows 上,将应用程序窗口放在其他窗口的顶部。 WindowOrder = 0 | ||||||||||
onConfigure() 示例 | //将宽度设置为 1280 像素,将高度设置为 720 像素,并将其放在与顶部相距 100 像素、 //与设备屏幕的左侧相距 1 像素处。 //将应用程序窗口放在设备屏幕的左上角。 configuration.defaultWindowProperties.x = 0; configuration.defaultWindowProperties.y = 0; //在 Windows 上,将应用程序窗口放在其他窗口之上。 configuration.defaultWindowProperties.order = 0; |
您可以设置 Kanzi 应用程序窗口的样式。除了允许用户重设边框大小的默认窗口以外,您还可以将 Kanzi 应用程序设置为在无边框的窗口、固定大小的窗口和占据整个设备屏幕的窗口中启动。
要了解如何设置应用程序窗口的位置和大小,请参阅 应用程序窗口位置和大小。
对于 application.cfg | WindowStyle = "style" | ||
对于 onConfigure() | configuration.defaultWindowProperties.style = style; | ||
值 (Value) |
| ||
application.cfg 示例 | #在占据整个设备屏幕的窗口中启动应用程序。 WindowStyle = "fullscreen" | ||
onConfigure() 示例 | //在占据整个设备屏幕的窗口中启动应用程序。 |
当在具有不只一个显示屏的系统上以全屏模式运行您的 Kanzi 应用程序时,您可以设置 Kanzi 应用程序窗口的默认显示位置。
要了解如何将应用程序窗口设置为全屏,请参阅 WindowStyle。
对于 application.cfg | DefaultDisplayIndex = index | ||
对于 onConfigure() | configuration.defaultWindowProperties.defaultDisplayIndex = index; | ||
值 (Value) |
| ||
application.cfg 示例 | #将第二个显示屏设置为全屏应用程序窗口的默认显示屏。 DefaultDisplayIndex = 1 | ||
onConfigure() 示例 | //将第二个显示屏设置为全屏应用程序窗口的默认显示屏。 configuration.defaultWindowProperties.defaultDisplayIndex = 1; |
如果您目标设备的窗口设置支持设置窗口缓冲区数量,则可以设置 Kanzi 应用程序窗口使用的本机窗口缓冲区数量。例如,Renesas 窗口管理器和 QNX Screen 支持设置窗口缓冲区数量。
对于 application.cfg | WindowBufferCount = value | ||
对于 onConfigure() | configuration.defaultWindowProperties.bufferCount = value; | ||
值 |
| ||
application.cfg 示例 | #将 Kanzi 应用程序窗口使用的本机窗口缓冲区数量设置为 3。
WindowBufferCount = 3
| ||
onConfigure() 示例 | //将 Kanzi 应用程序窗口使用的本机窗口缓冲区数量设置为 3。
configuration.defaultWindowProperties.bufferCount = 3; |
您可以定义应用程序如何处理触摸和指针输入。当在设备上运行您的应用程序时,您可以设置应用程序是响应设备指针、使用触摸屏还是同时支持这两种操作。还可以设置输入事件坐标的转换矩阵。
您可以设置输入坐标的转换矩阵。转换只影响输入事件坐标,不影响 Kanzi 应用程序屏幕的方向。例如,使用此功能根据您应用程序的屏幕,旋转触摸屏。
对于 application.cfg | InputTransform = transformation | ||
对于 onConfigure() | configuration.defaultEventSourceProperties.transformation = transformation; | ||
值 |
| ||
application.cfg 示例 | #将大小为 1280x720 像素的触摸屏幕旋转 180 度。 InputTransform = -1, 0, 0, 0, -1, 0, 1280, 720, 1 | ||
onConfigure() 示例 | //将大小为 1280x720 像素的触摸屏幕旋转 180 度。 configuration.defaultEventSourceProperties.transformation = Matrix3x3::createTranslation(1280, 720) * Matrix3x3::createRotationInDegrees(180.0f); | ||
示例使用此等式计算变换矩阵: |
您可以设置 Kanzi 如何变换指针和触摸事件。
对于 application.cfg | InputTranslation = translation | ||
对于 onConfigure() | configuration.defaultEventSourceProperties.translation = translation; | ||
值 |
| ||
application.cfg 示例 | # 将指针事件变换为触摸事件。 InputTranslation = PointerToTouch | ||
onConfigure() 示例 | //将指针事件变换为触摸事件。 configuration.defaultEventSourceProperties.translation = KZS_INPUT_TRANSLATE_POINTER_TO_TOUCH; |
您可以设置应用程序是否响应设备指针。
对于 application.cfg | InputDiscardPointer = value | ||||||
对于 onConfigure() | configuration.defaultEventSourceProperties.discardPointerEvents = value; | ||||||
值 |
| ||||||
application.cfg 示例 | # 忽略指针输入。 InputDiscardPointer = 1 | ||||||
onConfigure() 示例 | //忽略指针输入。 configuration.defaultEventSourceProperties.discardPointerEvents = 1; |
您可以设置应用程序是否响应触摸输入。
对于 application.cfg | InputDiscardTouch = value | ||||||
对于 onConfigure() | configuration.defaultEventSourceProperties.discardTouchEvents = value; | ||||||
值 |
| ||||||
application.cfg 示例 | # 忽略触摸输入。 InputDiscardTouch = 1 | ||||||
onConfigure() 示例 | //忽略触摸输入。 configuration.defaultEventSourceProperties.discardTouchEvents = 1; |
如果本地窗口系统不提供输入设备处理,您可以在 Linux 端口配置 Kanzi 听从的输入事件设备。通过这种方式,Kanzi可以直接听从来自操作系统提供的输入事件设备的事件。
例如,在 Vivante fbdev 和 WSEGL 端口中,您可以配置 Kanzi 听从的输入事件设备。在 X11 和 Wayland 端口中,本地窗口系统处理输入设备。
Kanzi 默认听从 /dev/input 目录中名为 eventN 的所有输入事件设备,其中 N 是整数。
对于 application.cfg | InputEventDevice = path | ||
对于 onConfigure() | configuration.defaultEventSourceProperties.inputEventDevice = path; | ||
值 |
| ||
application.cfg 示例 | #听从来自一个输入事件设备的事件。 InputEventDevice = "/dev/input/event1" #听从来自两个输入事件设备的事件。 InputEventDevice = "/dev/input/event0;/dev/input/event1" #禁止听从来自输入事件设备的事件。 InputEventDevice = "none" | ||
onConfigure() 示例 | //听从来自一个输入事件设备的事件。 //听从来自两个输入事件设备的事件。 //禁止听从来自输入事件设备的事件。 |